package com.yjp.erp.util;

import java.security.MessageDigest;
/**
 * @author wyf
 */
public class Md5Utils {
	 public static String encrytMD5(String data){
		try{
	    	//指定加密算法
			MessageDigest digest=MessageDigest.getInstance("MD5");
			digest.update(data.getBytes());
			return encryptMD5toString(digest.digest());	
		}catch (Exception e){
			e.printStackTrace();
			return null;
		}
	 }
	/**
	 * @author wyf
	 * @description  将加密后的字节数组转化为固定长度的字符串
	 * @return java.lang.String
	 */
	private static String encryptMD5toString(byte[] data){
		try{
			String str="";
			String str16; 
			for(int i=0;i<data.length;i++){
				//转换为16进制数据
				//Integer.toHexString的参数是int，如果不进行&0xff，那么当一个byte会转换成int时，由于int是32位，而byte只有8位这时会进行补位，
				//例如补码11111111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊，呵呵！即0xffffffff但是这个数是不对的，这种补位就会造成误差。
				//和0xff相与后，高24比特就会被清0了，结果就对了。
				str16=Integer.toHexString(0xFF & data[i]);
				if(str16.length()==1){
					str = new StringBuilder(str).append("0").append(str16).toString();

		 		}else{
		 			str=new StringBuilder(str).append(str16).toString();
		 		}
			}
			return str;
		}catch (Exception e){
			e.printStackTrace();
			return null;
		}
	}
}
